package com.rgs.base.core.system;

/**
 * @author Ren Gaoshuai
 * @ClassName WebResponseState
 * @date 2021-12-24 16:19
 **/

import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * 错误类型对应业务类型
 * 401xx - 系统级别错误
 * 402xx - 参数级别错误
 * 406xx - 文件错误
 *
 */
public enum WebResponseState {
    /**
     * 成功返回
     */
    SUCCESS(200, "成功返回"),
    /**
     * 成功返回
     */
    SUCCESS_TO_TASK(201, "成功返回，到异步任务列表查看"),

    SUCCESS_ACCOUNT_BALANCE_NOT_ENOUGH(202, "成功消费但是余额不足"),

    SUCCESS_TO_ASYNC(203, "提交成功并转入异步"),
    /**
     * 错误返回
     */
//    BAD_REQUEST(400, "返回错误"),

    // 交易数据重复，已有该订单
    REPEAT_DATA(401, "交易数据重复，已有该订单"),

    /**
     * 地址未找到
     */
//    NOT_FOUND(404, "地址未找到"),
    /**
     * 服务错误及未定义的错误
     */
    INTERNAL_SERVER_ERROR(500, " 服务错误及未定义的错误"),

    UNAUTHORIZED(502, "授权异常"),
    /**
     * ------------ 401xx -	系统级别错误 ----------------
     */
    // 接口请求超时
    REQUEST_TIMEOUT(40101, "请求超时"),
    // 请求第三方接口失败
    REQUEST_THIRD_FAIL(40102, "请求第三方接口失败"),
    // 其他已捕获的错误
    OTHER_ERROR(40103, "其他已捕获的错误"),
    // 未登录
    NOT_LOGIN(40104, "未登录"),
    // 用户名不能为空
    ACCOUNT_ERROR(40105, "用户名不能为空"),
    // 密码错误
    PASSWORD_ERROR(40106, "密码错误"),
    // 用户被锁定
    ACCOUNT_LOCKER(40107, "用户被锁定"),
    // HYSTRIX
    HYSTRIX_FALLBACK(40108, "hystrix断路器启动"),
    // 判断为攻击
    ATTACK_VERIFICATION(40109, "判断为攻击"),
    // 签名失败
    SIGNATURE_ERROR(40110, "签名失败"),
    // 网关错误
    GATEWAY_ERROR(40111, "网关错误"),
    // 组织存在子集
    ORGANIZE_HAS_CHILD(40112, "组织存在子组织"),
    // 登录类型错误
    LOGIN_TYPE_ERROR(40113, "登录类型错误"),
    // 未找到匹配记录
    NOT_MATCHING_RECORD(40114, "未找到匹配记录"),
    // 运行或停止JOB失败
    RUN_JOB_ERR(40115, "运行或停止JOB失败"),
    // JOB_GROUP存在子集
    JOB_GROUP_HAS_CHILD(40116, " JOB_GROUP存在子集"),
    // 存在未停止任务不可结束
    TIMING_TASKS(40117, "存在未停止任务不可结束"),
    // 交易数据重复
    DATA_REPEAT(40118, "交易数据重复"),
    // 数据过期
    DATA_EXPIRE(40119, "数据过期"),
    // 请求上限
    RATE_LIMITER(40120, "请求上限"),
    // 熔断
    CIRCUIT_BREAKER(40121, "熔断"),
    // 数据存在
    DATA_EXIST(40122, "数据存在"),
    // 没有记录
    NO_DATA(40123, "没有记录"),
    // 队列异常
    MQ_ERROR(40124, "队列异常"),
    // 请求超出限制
    REQUEST_LIMIT(40125, "请求超出限制"),
    // Feign类型转换错误
    TYPE_CAST_ERROR(40126, "Feign类型转换错误"),
    // 数据不存在
    DATA_NOT_EXIST(40127, "数据不存在"),
    // 数据不存在
    EVENT_BUS_SUBSCRIBE_ERROR(40128, "eventBus 订阅者内部错误"),
    // 参数字段校验错误
    PARAMETER_VALIDATION_ERROR(40129, "参数字段校验错误"),
    // 服务未注册
    SERVER_NOT_REGISTER(40130, "服务未注册"),
    // 同一根组织下组织编号不能重复
    ORGANIZE_ENCODE_REPEAT(40131, "同一根组织下组织编号不能重复"),
    ROOT_ORGANIZE_NOT_DELETE(40132, "根组织不能删除"),
    DES_DECRYPT_ERROR(40133, "数据解密失败"),
    COMMUNICATION_ERROR(40134, "通信异常"),
    ZIP_ERROR(40135, "解压失败"),
    // 不支持的操作

    UNSUPPORTED_OPERATION(40136, "不支持的操作"),
    NOT_SEND_DRIVER(40137, "无可下发的司机信息"),

    MEMBER_OUT_tTIME(40138, "会员已过期"),

    LAYERS_ERROR(40139, "请选择非运行商企业"),
    KEY_NOT_EXIST(40140, "密钥不存在"),
    DES_ENCRYPT_ERROR(40141, "数据加密失败"),

    // 司机已存在
    DRIVER_ALREADY_EXIST(40142, "司机已存在"),
    MUST_ENTERPRISE(40143, "必须是企业级商户"),
    // 汇总合计错误
    SUMMARY_TOTAL_ERR(40144, "汇总合计错误"),

    REFLETCT_METHOD(40145, "反射获取METHOD异常"),

    DOCUMENT_DIR_NOT_EXIST(40146, "文档目录不存在"),

    CAPTCHA_ERROR(40147, "获取验证码失败"),

    READER_ERROR(40148, "读写器错误"),
    RETRY(40149, "请重试"),
    NO_PERMISSION(40150, "权限不足"),
    USER_NON_EXISTENT(40151, "用户不存在"),
    CAPTCHA_NON_EXISTENT(40152, "验证码不存在"),
    /**
     * --------------- 402xx - 参数级别错误 ---------------------
     */
    // 参数不能为空
    PARAMETER_MUST_NOT_NULL(40201, "参数不能为空"),

    // 第三方组织id不能为空
    THIRD_ORGANIZE_ID_MUST_NOT_NULL(40202, "第三方组织id不能为空"),

    // 非法访问
    ILLEGAL_ACCESS(40203, "非法访问"),

    // 日志记录错误
    LOG_RECORD_ERROR(40204, "日志记录错误：时间戳转日期失败"),

    /**
     * ----------------- 406xx - 文件错误 --------------------
     */
    // 没有此文件
    NO_FILE(40601, "没有此文件"),

    // 文件保存异常
    FILE_SAVE_ERR(40602, "文件保存异常"),

    // 文件不能为空
    FILE_EMPTY(40603, "文件不能为空"),

    // 文件上传失败
    FILE_UPLOAD_ERROR(40604, "文件上传失败"),

    // 异步任务失败
    ASYNC_TASK_ERROR(40605, "异步任务失败"),


    // 下载转为异步，请进入文件任务列表查看
    REDIRECT_TO_TASK_LIST(40606, "请进入文件任务列表查看"),

    FILE_DUPLICATE_NAME(40607, "文件重名"),

    ASYNC_TASK_TIMEOUT_ERROR(40608, "异步任务超时"),

    ASYNC_TASK_INTERRUPTED_ERROR(40609, "异步任务被中断"),

    /**
     * 添加前请看：
     * 错误类型对应业务类型
     * 		401xx -	系统级别错误
     * 		402xx - 参数级别错误
     * 	    406xx - 文件错误
     */
    ;

    private int code;
    private String standardMessage;

    WebResponseState(int code, String standardMessage) {
        this.code = code;
        this.standardMessage = standardMessage;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getStandardMessage() {
        return standardMessage;
    }

    public void setStandardMessage(String standardMessage) {
        this.standardMessage = standardMessage;
    }


    private static final Map<Integer, WebResponseState> WEB_RESPONSE_STATE_MAP = new HashMap<>();

    static {
        for (WebResponseState item : values()) {
            WEB_RESPONSE_STATE_MAP.put(item.getCode(), item);
        }
    }

    public static WebResponseState getByCode(int code) {
        WebResponseState webResponseState = WEB_RESPONSE_STATE_MAP.get(code);
        return webResponseState == null ? INTERNAL_SERVER_ERROR : webResponseState;
    }

}


